package main

import (
	"fmt"
	"runtime"
)

type myfun func(x int) int

func a(x int) int {
	return x
}

func f(y int) int {

	return a(y)
}

var g = "g"

func main() {

	const (
		a = iota
		b = iota
		c = iota
	)

	println(a, b, c)
	const (
		d = iota
		e
		f
	)

	println(d, e, f)

	fmt.Println(f)

	//f = "f"
	//
	//fmt.Println(f)

	fmt.Println(g)

	const h = 123
	fmt.Println(h)

	fmt.Printf("%b", 10)

	var os = fmt.Sprintf("OS: %s", runtime.GOOS)
	println(os)
}

/*
格式化输出
https://www.cnblogs.com/yinzhengjie/p/7680829.html

布尔值：
1 %t    单词true或false

整数：
复制代码
1 %b    表示为二进制
2 %c    该值对应的unicode码值
3 %d    表示为十进制
4 %o    表示为八进制
5 %q    该值对应的单引号括起来的go语法字符字面值，必要时会采用安全的转义表示
6 %x    表示为十六进制，使用a-f
7 %X    表示为十六进制，使用A-F
8 %U    表示为Unicode格式：U+1234，等价于"U+%04X"

浮点数、复数的两个组分：

1 %b    无小数部分、二进制指数的科学计数法，如-123456p-78；参见strconv.FormatFloat %e    科学计数法，如-1234.456e+78 %E    科学计数法，如-1234.456E+78 %f    有小数部分但无指数部分，如123.456 %F    等价于%f %g    根据实际情况采用%e或%f格式（以获得更简洁、准确的输出）
2 %G    根据实际情况采用%E或%F格式（以获得更简洁、准确的输出）
字符串和[]byte：

1 %s    直接输出字符串或者[]byte %q    该值对应的双引号括起来的go语法字符串字面值，必要时会采用安全的转义表示
2 %x    每个字节用两字符十六进制数表示（使用a-f）
3 %X    每个字节用两字符十六进制数表示（使用A-F）
指针：

1 %p    表示为十六进制，并加上前导的0x
没有verb %u。整数如果是无符号类型自然输出也是无符号的。类似的，也没有必要指定操作数的尺寸（int8，int64）。

宽度通过一个紧跟在百分号后面的十进制数指定，如果未指定宽度，则表示值时除必需之外不作填充。精度通过（可能有的）宽度后跟点号后跟的十进制数指定。如果未指定精度，会使用默认精度；如果点号后没有跟数字，表示精度为0。举例如下：

1 %f:    默认宽度，默认精度
2 %9f    宽度9，默认精度
3 %.2f   默认宽度，精度2 %9.2f  宽度9，精度2 %9.f   宽度9，精度0
宽度和精度格式化控制的是Unicode码值的数量（不同于C的printf，它的这两个因数指的是字节的数量）。两者任一个或两个都可以使用'*'号取代，此时它们的值将被对应的参数（按'*'号和verb出现的顺序，即控制其值的参数会出现在要表示的值前面）控制，这个操作数必须是int类型。

对于大多数类型的值，宽度是输出的最小字符数，如果必要是会用空格填充。对于字符串，宽度是输出字符数目的最低数量，如果必要会截断字符串。

对于整数，宽度和精度都设置输出总长度。采用精度时表示右对齐并用0填充，而宽度默认表示用空格填充。

对于浮点数，宽度设置输出总长度；精度设置小数部分长度（如果有的话），除了%g/%G，此时精度设置总的数字个数。例如，对数字123.45，格式%6.2f 输出123.45；格式%.4g输出123.5。%e和%f的默认精度是6，%g的默认精度是可以将该值区分出来需要的最小数字个数。

对复数，宽度和精度会分别用于实部和虚部，结果用小括号包裹。因此%f用于1.2+3.4i输出(1.200000+3.400000i)。

其它flag：

复制代码
1 +    总是输出数值的正负号；对%q（%+q）会生成全部是ASCII字符的输出（通过转义）；
2 -    在输出右边填充空白而不是默认的左边（即从默认的右对齐切换为左对齐）；
3 #    切换格式：
4       八进制数前加0（%#o），十六进制数前加0x（%#x）或0X（%#X），指针去掉前面的0x（%#p）；
5      对%q（%#q），如果strconv.CanBackquote返回真会输出反引号括起来的未转义字符串；
6      对%U（%#U），如果字符是可打印的，会在输出Unicode格式、空格、单引号括起来的go字面值；
7 ' '    对数值，正数前加空格而负数前加负号；
8       对字符串采用%x或%X时（% x或% X）会给各打印的字节之间加空格；
9 0    使用0而不是空格填充，对于数值类型会把填充的0放在正负号后面；
复制代码
*/
